DataFrame

DataFrame

类似于二维数组,有行索引和列索引

DataFrame创建

# 导入pandas
import pandas as pd

pd.DataFrame(data=None, index=None, columns=None)
# 生成日期
pd.date_range(start, end, periods, freq)
>>> score = np.random.randint(40, 100, (10, 5))
>>> score

array([[52, 56, 68, 69, 97],
       [74, 48, 52, 77, 83],
       [87, 42, 86, 52, 80],
       [51, 84, 98, 59, 83],
       [54, 75, 49, 62, 49],
       [80, 83, 71, 82, 61],
       [78, 81, 99, 86, 95],
       [64, 49, 88, 45, 55],
       [82, 91, 92, 84, 43],
       [89, 74, 78, 75, 52]])

>>> score_df = pd.DataFrame(score)
>>> score_df

0	1	2	3	4
0	52	56	68	69	97
1	74	48	52	77	83
2	87	42	86	52	80
3	51	84	98	59	83
4	54	75	49	62	49
5	80	83	71	82	61
6	78	81	99	86	95
7	64	49	88	45	55
8	82	91	92	84	43
9	89	74	78	75	52

>>> subjects = ['语文', '数学', '英语', '政治', '体育']
>>> stu = ['同学' + str(i) for i in range(score_df.shape[0])]
>>> data = pd.DataFrame(score, columns=subjects, index=stu)

>>> stu
['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9']

>>> data
语文	数学	英语	政治	体育
同学0	52	56	68	69	97
同学1	74	48	52	77	83
同学2	87	42	86	52	80
同学3	51	84	98	59	83
同学4	54	75	49	62	49
同学5	80	83	71	82	61
同学6	78	81	99	86	95
同学7	64	49	88	45	55
同学8	82	91	92	84	43
同学9	89	74	78	75	52

DataFrame的属性

DataFrame的方法

>>> data.shape # 获取形状
(10, 5)

>>> data.index # 获取行索引
Index(['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9'], dtype='object')

>>> data.columns # 获取列索引
Index(['语文', '数学', '英语', '政治', '体育'], dtype='object')

>>> data.values # 获取所有的值
array([[52, 56, 68, 69, 97],
       [74, 48, 52, 77, 83],
       [87, 42, 86, 52, 80],
       [51, 84, 98, 59, 83],
       [54, 75, 49, 62, 49],
       [80, 83, 71, 82, 61],
       [78, 81, 99, 86, 95],
       [64, 49, 88, 45, 55],
       [82, 91, 92, 84, 43],
       [89, 74, 78, 75, 52]])

>>> data.T # 行列互换
同学0	同学1	同学2	同学3	同学4	同学5	同学6	同学7	同学8	同学9
语文	52	74	87	51	54	80	78	64	82	89
数学	56	48	42	84	75	83	81	49	91	74
英语	68	52	86	98	49	71	99	88	92	78
政治	69	77	52	59	62	82	86	45	84	75
体育	97	83	80	83	49	61	95	55	43	52

>>> data.head() # 默认5行, 取前5行
语文	数学	英语	政治	体育
同学0	52	56	68	69	97
同学1	74	48	52	77	83
同学2	87	42	86	52	80
同学3	51	84	98	59	83
同学4	54	75	49	62	49

>>> data.tail() # 默认5行 取后5行
语文	数学	英语	政治	体育
同学5	80	83	71	82	61
同学6	78	81	99	86	95
同学7	64	49	88	45	55
同学8	82	91	92	84	43
同学9	89	74	78	75	52

索引的修改

>>> stu = ['同学_' + str(i) for i in range(score_df.shape[0])]
>>> data.index = stu
语文	数学	英语	政治	体育
同学_0	52	56	68	69	97
同学_1	74	48	52	77	83
同学_2	87	42	86	52	80
同学_3	51	84	98	59	83
同学_4	54	75	49	62	49
同学_5	80	83	71	82	61
同学_6	78	81	99	86	95
同学_7	64	49	88	45	55
同学_8	82	91	92	84	43
同学_9	89	74	78	75	52
pd.index = index_new

注意:要修改索引,必须整体进行修改,不能够局部进行修改。

重设索引

reset_index(drop=False)

# 重置索引,drop=False
>>> data.reset_index()

index	语文	数学	英语	政治	体育
0	同学0	52	56	68	69	97
1	同学1	74	48	52	77	83
2	同学2	87	42	86	52	80
3	同学3	51	84	98	59	83
4	同学4	54	75	49	62	49
5	同学5	80	83	71	82	61
6	同学6	78	81	99	86	95
7	同学7	64	49	88	45	55
8	同学8	82	91	92	84	43
9	同学9	89	74	78	75	52

以某列值设置为新的索引

set_index(keys, drop=True) :

>>> df = pd.DataFrame({'month': [1, 4, 7, 10],
                   'year': [2012, 2014, 2013, 2014],
                   'sale':[55, 40, 84, 31]})
>>> df
month	year	sale
0	1	2012	55
1	4	2014	40
2	7	2013	84
3	10	2014	31

以月份设置新的索引

>>> df.set_index('month') # 设置月份为新的索引
			year	sale
month		
1	2012	55
4	2014	40
7	2013	84
10	2014	31

设置多个索引,以年和月份

# 设置多个索引,以年和月份
>>> df =df.set_index(['year', 'month'])
>>> df

			sale
year	month	
2012	1	55
2014	4	40
2013	7	84
2014	10	31